//
//  ViewController.m
//  RAC的简单应用
//
//  Created by wsj on 16/8/14.
//  Copyright © 2016年 wsj. All rights reserved.
//
#warning 本工程为里面三个例子，牵扯登录，代理，和网络请求，基本上都是将博客的代码自己敲写一下加上自己的理解，也为进阶篇。
#warning 本工程为七秒记忆鱼儿著，转载请备注七秒记忆鱼儿。用于自己也是刚刚了解RAC与MVVM框架写的不好请见谅，我也是根据别人的博客写的，博客地址为
// http://www.jianshu.com/p/87ef6720a096 基础篇
// http://www.jianshu.com/p/e10e5ca413b7 进阶篇
#warning  我是七秒记忆鱼儿，如果在使用中出现的bug的话请联系593216709，期待你的指导，转载时请备注七秒记忆鱼儿
#warning  本人简书地址为http://www.jianshu.com/users/e3402afea1f1/latest_articles
#warning  我们的swfit简书专题为http://www.jianshu.com/collection/e30d753afdee
#warning   iOS开发者交流群:446310206 小白进阶群！！期待你的加入！demo在这里！
#warning   wfit交流群为512847147 小白进阶群！！期待你的加入！demo在这里！

#import "ViewController.h"
#import "TwoViewController.h"
#import "LoginViewModel.h"
#import "ReactiveCocoa-umbrella.h"
#import "Account.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UITextField *account_textFile;

@property (weak, nonatomic) IBOutlet UITextField *password_textFile;
@property (weak, nonatomic) IBOutlet UIButton *login_button;

@property (weak, nonatomic) IBOutlet UIButton *netWork_button;
/***/
@property(nonatomic,strong)LoginViewModel *loginViewModel;

@end

@implementation ViewController
-(LoginViewModel *)loginViewModel
{
    if (_loginViewModel == nil) {
        _loginViewModel = [[LoginViewModel alloc]init];
    }
    return _loginViewModel;
}
- (void)viewDidLoad {
    [super viewDidLoad];
    // 绑定试图
    [self bindModel];
    
    [[self.netWork_button rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) {
        TwoViewController *twoVC = [[TwoViewController alloc]init];
        twoVC.backgroundColor_signal = [RACSubject subject];
        [twoVC.backgroundColor_signal subscribeNext:^(id x) {
            self.view.backgroundColor = x;
        }];
        [self presentViewController:twoVC animated:YES completion:nil];
    }];

}
// 试图绑定
-(void)bindModel
{
    // 给模型的属性绑定信号
    // 只要账号文本框一改变，就会给account赋值
    // 就是只要self.account_textFile的值发生了改变就会赋值给self.loginViewModel.account模型的account的属性
    RAC(self.loginViewModel.account,account) = self.account_textFile.rac_textSignal;
    RAC(self.loginViewModel.account,password) = self.password_textFile.rac_textSignal;
    
    RAC(self.login_button,enabled) = self.loginViewModel.enableLoginSignal;
    // 按钮的点击事件
    // [self.login_button rac_signalForControlEvents:UIControlEventTouchUpInside]会返回一个按钮被点击的信号，只要我们订阅这个信号，就可以监听按钮的点击
    [[self.login_button rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) {
        // 获取RACCommand返回的信号
      RACSignal *signal =  [self.loginViewModel.command execute:nil];
        // 并且订阅这个信号
        [signal subscribeNext:^(NSString *x) {
            if ([x isEqualToString:@"登录成功"]) {
                TwoViewController *twoVC = [[TwoViewController alloc]init];
                twoVC.backgroundColor_signal = [RACSubject subject];
                [twoVC.backgroundColor_signal subscribeNext:^(id x) {
                    self.view.backgroundColor = x;
                }];
                [self presentViewController:twoVC animated:YES completion:nil];
            }
            
        }];
    }];
}

@end
